<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019/3/24 0024
 * Time: 15:27
 */
//https://blog.csdn.net/figli/article/details/41007573


//.文档实例：
//$descriptorspec = array(
//    0 => array("pipe", "r"),	//标准输入，子进程从此管道读取数据
//    1 => array("pipe", "w"),	//标准输出，子进程向此管道写入数据
//    2 => array("file", "./error-output.txt","a")	//标准错误，写入到指定文件
//);
//
//
//$process = proc_open("php", $descriptorspec, $pipes);
//
//if(is_resource($process)) {
/*    fwrite($pipes[0], "<?php echo 'Hello figli!';?>");*/
//    fclose($pipes[0]);
//
////    echo stream_get_contents($pipes[1]);
//    echo fgets($pipes[1]);
//    fclose($pipes[1]);
//
//    proc_close($process);    //在调用proc_close之前必须关闭所有管道
//
//}

//运行linux命令
//$descriptorspec = array(
//    0 => array("pipe", "r"),	//标准输入，子进程从此管道读取数据
//    1 => array("pipe", "w"),	//标准输出，子进程向此管道写入数据
//    2 => array("file", "./error-output.txt","a")	//标准错误，写入到指定文件
//);
//
//$process = proc_open("ls -a", $descriptorspec, $pipes);
//if(is_resource($process)) {
//
//    echo stream_get_contents($pipes[1]);
//    fclose($pipes[1]);
//
//    proc_close($process);    //在调用proc_close之前必须关闭所有管道
//}
//echo '异步执行吗';//no
//阻塞运行，等待运行结果
$descriptorspec = array(
    0 => array("pipe", "r"),	//标准输入，子进程从此管道读取数据
    1 => array("pipe", "w"),	//标准输出，子进程向此管道写入数据
    2 => array("file", "./error-output.txt","a")	//标准错误，写入到指定文件
);


$process = proc_open("php", $descriptorspec, $pipes);

if(is_resource($process)) {
    fwrite($pipes[0], "<?php sleep(5); echo 'Hello figli!';?>");
    fclose($pipes[0]);

//    echo stream_get_contents($pipes[1]);
    echo fgets($pipes[1]);
    fclose($pipes[1]);

    proc_close($process);    //在调用proc_close之前必须关闭所有管道

}